package com.tedu.api.list;
import org.junit.Test;
import sun.awt.image.ImageWatched;

import java.util.*;

/**
 * 链表实现集合--三个实现类：
 * ArrayList 实现类：数组实现
 *           特点：查询快【按照下标】，增删慢【改动下标】
 *LinkedList 实现类：双向链表实现
 *           特点：查询慢【按照下标】，增删快【首,尾元素，中间元素】
 *ArrayList与LinkedList大部分方法完全一致：
 * 添加add()        获取get()     删除remove()
 * size()获取集合总数        clear()清空集合元素
 *
 * 不一致方法：
 * indexOf() lastIndexOf()
 * addFrist()
 * addLast()
 * removeFrist()
 * removeLast()
 *
 */
public class LinkedListAPI {
    @Test
    public void testIndexOf(){
       //创建集合--双向链接集合
       List<String> list=new ArrayList<>();
       list.add("三吱");
       list.add("龙虎斗");
       list.add("螺蛳粉");
       list.add("庵汤");
        /**
         * ArrayList与LinkedList通用方法
         * indexOf()   返回值：int
         * 作用：返回指定元素在集合中第一次出现的索引位置
         *     【理解：返回元素的下标位】
         */
        int index=list.indexOf("庵汤");
        /**
         * LinkedList独有方法
         * LastIndexOf()  返回值：int
         * 作用：返回最后的元素在集合中出现的位置
         *
         */
        int lastIndex= list.lastIndexOf("庵汤");
        System.out.println("返回最后元素下标："+lastIndex);

    }
    /**
     * LinkedList独有方法
     * addFrist()   返回值：void
     * 作用：将指定元素添加至链表尾部
     * removeFrist
     */
    //创建集合--双向链接集合
    @Test
    public void testAR() {
        List<String> list = new ArrayList<>();
        list.add("三吱");
        list.add("龙虎斗");
        list.add("螺蛳粉");
        list.add("庵汤");
        //LinkedList独有方法
        ((LinkedList) list).addFirst("榴莲");
        ((LinkedList) list).addFirst("豆汁");
        System.out.println("双向链表:"+list);
        ((LinkedList) list).removeFirst();
        System.out.println("双向链表:"+list);
    }
}
